/**
 *
 * @author Gratien
 */
package edu.com.gestionstock.controleur;

import edu.com.gestionstock.bean.Utilisateur;
import javax.swing.JOptionPane;

import edu.com.gestionstock.dao.DAO;
import edu.com.gestionstock.dao.bo.UtilisateursDAO;
import edu.com.gestionstock.vue.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

public class ControleurModifieClient implements ActionListener
{

    private FenetrePrincipale fenetrePrincipale;
    private PanneauAfficheClient fenetreClient;
    private PanneauModifieClient modifClient;
    private DefaultTableModel tableau;
    private Utilisateur client = new Utilisateur();
    private DAO<Utilisateur> clientDao = new UtilisateursDAO();
    private Integer row;

    public ControleurModifieClient(FenetrePrincipale paramPrincipale)
    {
        this.fenetrePrincipale = paramPrincipale;
        this.fenetreClient = this.fenetrePrincipale.getPanneauAfficheClient();
        this.modifClient = this.fenetrePrincipale.getPanneauModifieClient();
        this.tableau = fenetreClient.getModele();
        setControleurFenetre(this);
    }

    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();

        //Recherche Stock
        if ( source == modifClient.getJButtonAnnuler() )
        {
            //Retour à l'affichage des client 
            this.fenetrePrincipale.masqueTousLesPanneaux();
            this.fenetrePrincipale.getPanneauAfficheClient().setVisible(true);
        }
        if ( source == modifClient.getJButtonModifier() )
        {
            this.doChange();
        }
    }

    public void checkChange()
    {
        //On récupère la ligne dans le tableau qui est selectionné
        row = this.fenetreClient.getTableau().getSelectedRow();

        //On vérifie s'il y a une ligne de séléctionnée, sans cela on affiche un message d'erreur
        if ( row >= 0 )
        {

            //On recupére les valeurs d'une ligne spécifique du tableau
            Integer id = Integer.decode(this.tableau.getValueAt(row, 0).toString());

            //Récupérer les données de la DB sur base de l'id
            //check si ID existe


            client = clientDao.find(id);

            //Je pars du principe que le champ Nom est obligatoire, donc si ce champ est vide alors c'est que l'ID n'existe pas en DB
            if ( client.getNom() != null )
            {
                //S'il existe un DVD avec cet identifiant, on recupére les informations
                id = client.getId();

                //On masque les ecrans
                this.fenetrePrincipale.masqueTousLesPanneaux();

                //On affiche le panneau de modification
                this.fenetrePrincipale.getPanneauModifieClient().setVisible(true);

                //On ajoute les données dans les champs pour modifier
                modifClient.setjTextFieldNom(client.getNom());
                modifClient.setjTextFieldPrenom(client.getPrenom());
                modifClient.setjTextFieldRue(client.getRue());
                modifClient.setjTextFieldCodePostal(client.getCodePostal());
                modifClient.setjTextFieldCommune(client.getCommune());
                modifClient.setjTextFieldDateNaissance(client.getDateDeNaissance());
                modifClient.setjTextFieldTelephone(client.getTelephone());
            }
            else
            {
                //Pas de titre
                id = null;

                JOptionPane.showMessageDialog(null, "Erreur, données inexistante dans la DB");
                this.fenetrePrincipale.masqueTousLesPanneaux();
                this.fenetrePrincipale.getPanneauAfficheClient().setVisible(true);
            }
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Veuillez séléctionner la ligne à modifier");
            this.fenetrePrincipale.masqueTousLesPanneaux();
            this.fenetrePrincipale.getPanneauAfficheClient().setVisible(true);
        }
    }

    public void doChange()
    {
        //On complete les données du client
        this.client.setNom(modifClient.getJTextField_Nom().getText());
        this.client.setPrenom(modifClient.getJTextField_Prenom().getText());
        this.client.setRue(modifClient.getJTextField_Rue().getText());
        this.client.setCodePostal(modifClient.getJTextField_CodePostal().getText());
        this.client.setCommune(modifClient.getJTextField_Commune().getText());
        this.client.setDateDeNaissance(modifClient.getJTextField_DateNaissance().getText());
        this.client.setTelephone(modifClient.getJTextField_Telephone().getText());

        clientDao.update(client);

        this.fenetrePrincipale.masqueTousLesPanneaux();
        this.fenetrePrincipale.getControleurAfficheClient().init();
        this.fenetrePrincipale.getPanneauAfficheClient().setVisible(true);

    }

    public void setControleurFenetre(ActionListener listener)
    {
        this.modifClient.getJButtonAnnuler().addActionListener(listener);
        this.modifClient.getJButtonModifier().addActionListener(listener);

    }
    /*
     private void deleteDVD(Dvd obj)
     {
     //Suppression dans la DB
     DvdDao.delete(obj);

     //On supprime la ligne dans l'affichage (on pourrait aussi retracer tout le tableau, mais question de performance je trouve ca plus interressant)
     this.fenetreStock.getModele().removeRow(this.row);
     }

     private void deleteLivre(Livres obj)
     {
     //Suppression dans la DB
     LvDao.delete(obj);

     //Suppression dans l'affichage stock
     this.fenetreStock.getModele().removeRow(this.row);
     }
     * */
}